In a typical data processing operation, tasks are typically performed by a computer in a sequence subject to constraints that certain tasks be performed before others. As each task is performed, data is transformed or manipulated, and the resulting output is temporarily stored in a buffer memory to be used as input for the next task.
Consider, for example, an image processing application wherein multiple filters are applied to pixels of an image. A first filter may receive red, green and blue values of the pixels and compute gray values of the pixels using, for example, the equation:gray=0.021216*r+0.7152*g+0.0722*b, where r, g, and b are respective red, green and blue values of the pixels.
A second filter may compute standard deviation for the pixels. A third filter may compute exposure values of the pixels using, for example, the equation:Exp=e−12.5*(r−0.5)2*e−12.5*(g−0.5)2*e−12.5*(b−0.5)2.
A fourth filter may be a laplacian filter for performing a 3×3 convolution operation of the gray values of the pixel to detect edges. Various other filters may be applied to the pixels for further image processing as those skilled in the pertinent art will appreciate.
According to existing methods, the aforementioned operations may be implemented in a system which provides intermediate storage for the intermediate results of each filter operations. The system may, for example, allocate a buffer memory for storing the intermediate results of each filter operation. Since each intermediate result must be written in the allocated buffer memory, existing methods require increased memory usage and high memory bandwidth.